/**
 * @module olcs.contrib.LazyLoader
 */
export default class LazyLoader {
    /**
     * @param {string} url
     * @api
     */
    constructor(url) {
        /**
         * @type {Promise<undefined>}
         * @protected
         */
        this.promise;
        /**
         * @private
         * @type {string}
         */
        this.url_ = url;
    }
    /**
     * @return {Promise<undefined>}
     * @api
     */
    load() {
        if (!this.promise) {
            // not yet loading
            this.promise = new Promise((resolve, reject) => {
                const script = document.createElement('script');
                script.onload = () => resolve();
                script.onerror = () => reject();
                document.head.appendChild(script);
                script.src = this.url_;
            });
        }
        return this.promise;
    }
}
